/*
 * Classe TCPServerListner
 *   Encapsula um servidor escutando uma porta TCP
 *
 * Equipe:
 *      Menandro Dias
 *      Pedro Alípio
 *      Sidney dos Santos
 *      Ubirajara Gabriela
 *
 */

package tcpserver.server;

import java.io.*;
import java.net.*;
import tcpserver.model.*;
import tcpserver.model.beans.*;

/**
 *
 * @author menandro.neto
 */
public class TCPServer {
	private ServerSocket tcpListener;
	private Socket connection;
	private ObjectOutputStream out;
	private ObjectInputStream in;
	private String message;

    private final int portNumber = 9000;

    public void run() {
        connection = null;
        try {
            tcpListener = new ServerSocket(portNumber, 10);
            System.out.println("Aguardando conexão");
            
            connection = tcpListener.accept();
            System.out.println("Requisição de " + connection.getInetAddress().getHostName() );
            // Canal de Saída
            out = new ObjectOutputStream( connection.getOutputStream() );
            out.flush();
            // Canal de entrada
            in = new ObjectInputStream( connection.getInputStream() );
            this.sendStatus(1);

            try {
                message = (String)in.readObject();
            }
            catch(ClassNotFoundException e){
                e.printStackTrace();
            }

            if (message.equals("Inclua"))
                this.inclua();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                //in.close();
                out.close();
                tcpListener.close();
            }
            catch(IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * Envia respostas ao cliente
     * @param message - Texto retornado ao cliente
     */
    private void sendMessage(String msg){
        try{
			out.writeObject(msg);
			out.flush();
			System.out.println("domPedro.tcpServer.RedesI>" + msg);
		}
		catch(IOException ioException){
			ioException.printStackTrace();
		}
    }

    /**
     * Envia ao cliente o status da conexão
     * @param status - Status do pacote 1 - Sucesso
     */
    private void sendStatus(int status){
        String messages[] = {
            ""
          , "Conexão com Sucesso"
          , "Comando executado com sucesso"
          , "Falha no Servidor"
        };

        this.sendMessage(messages[status]);
    }

    /**
     * Processa inclusão no banco de dados
     */
    private void inclua(){
        Database db = new Database();
        PlanoSaude plano = new PlanoSaude();
        plano.setPsauCategoria("Enfermaria");
        plano.setPsauDescricao("UNIMED Salvador");

        String sql = "insert into planosaude(psauDescricao, psauCategoria) " +
                "values (" + plano.getPsauDescricao() + ", " +
                plano.getPsauCategoria() + ")";

        db.connect();
        db.execSQL(sql);
        db.disConnect();

        this.sendStatus(2);
    }
}
